#pragma once
#include <iostream>
#include <pthread.h>
#include <functional>
#include <unistd.h>


template <typename T>
class Thread
{
public:
    Thread(std::function<void(T &)> func, T &data)
        : _func(func), _data(data)
    {
    }
    static void *threadroutine(void *args) // 类成员函数，形参是有this指针的！！
    {
        Thread<T> *self = (Thread<T> *)(args);
        self->_func(self->_data);
        return nullptr;
    }
    void Start()
    {
        pthread_create(&_tid, nullptr, threadroutine, this);
    }
    void Join()
    {
        pthread_join(_tid, nullptr);
    }
    ~Thread() {}

private:
    pthread_t _tid;
    std::function<void(T &)> _func;
    T &_data; // 为了让所有的线程访问同一个全局变量
};
